/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package mvc.controlador;


import java.sql.SQLException;

import mvc.modelo.basico.ModeloBasico;

import java.io.IOException;
import java.sql.ResultSet;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import mvc.helper.DebugBase;
import mvc.helper.FeedbackBase;
import mvc.modelo.basico.ModeloBasico;

/**
 *
 * @author PezEspada
 */
public class ErrorControl extends HttpServlet {

   HttpServletRequest request;
   HttpServletResponse response;
   HttpSession session;
   RequestDispatcher rd;
   ModeloBasico mybase = new ModeloBasico();
   ///> Feedback Retroalimentacion para el Cliente
   FeedbackBase feedback_mvc ;
   ///> Feedback Retroalimentacion para el Desarrollador
   DebugBase debug_mvc ;


    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param req servlet request
     * @param resp servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException  {
        request = req;
        response = resp;
        session = request.getSession();
        feedback_mvc = (FeedbackBase)request.getAttribute("feedback_mvc");
        debug_mvc = (DebugBase)request.getAttribute("debug_mvc");
        modulo_init();
        debug_mvc.InsertarMensaje("Modulo Trabajando:", "Error",0);

        //Que dispositivo estamos presentando COMPUTER | MOBILE
          if( this.esMobile_userAgent() ){ request.setAttribute("layoutActivo","WEB-INF/Layout/ErrorMobile.jsp" );
          }else{  request.setAttribute("layoutActivo","WEB-INF/Layout/Error.jsp" );     }


        //Capturas el param PRINCIPAL "mid" que puede ser un Atributo o un Parametro de entrada
        String tipoError = this.getValid_Request_Param_String( "tipo" );

        /* El el Siguiente bloque lo primero que se debe hacer es:
         * 1.- Escoger el submodulo segun Request(parametro mid) o Redireccionamiento(atributo mid)
         * 2.- Ejecutar el Metodo que Realiza Todo la Logica del Negocio - Obtener info DB.
         * 3.- Configurar param en Request para Presentacion.
         * 4.- Redireccionar al Layout de Presentacion
         */

          if( tipoError.equalsIgnoreCase("404")  ){
              feedback_mvc.InsertarMensaje("404", "Un error 404", feedback_mvc.M_ERROR);
          }else if( tipoError.equalsIgnoreCase("403")  ){
              feedback_mvc.InsertarMensaje("403", "Un error forbidden", feedback_mvc.M_ERROR);
          }else{ //Aqui se presenta INDEX
              feedback_mvc.InsertarMensaje("Error", "Error Interno del Sistema", feedback_mvc.M_ERROR);
          }

        ///>Redireccionando  - VIEW - VISTA
        ///>///////////////////////////////////////////////////////////////////
        ///>///////////////////////////////////////////////////////////////////
        request.setAttribute("debug_mvc", debug_mvc );
        request.setAttribute("feedback_mvc", feedback_mvc );
        rd = request.getRequestDispatcher( (String)request.getAttribute("layoutActivo") );
        rd.forward(request, response);
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

      processRequest(request, response);

    }

    /**
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
      processRequest(request, response);

    }

    /**
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>





    private void doIndex(){
       debug_mvc.InsertarMensaje("Submodulo", "DF - doIndex",0);
    //Capturas el param PRINCIPAL "acc" que puede ser un Atributo o un Parametro de entrada
       String accion_id = this.getValid_Request_Param_String( "acc" );
       request.setAttribute("accion_id", accion_id );
       request.setAttribute("contenido_id", accion_id );
       debug_mvc.InsertarMensaje("accion", accion_id, 0);


       if( accion_id.equalsIgnoreCase("prueba_ejemplo") ){
          debug_mvc.InsertarMensaje("Acc", "DF - full_info",0);
       //Que dispositivo estamos presentando COMPUTER | MOBILE
       //Component Information 1---------------------------------------------
       //Component Information 2---------------------------------------------
       //   ....
       //Component Information n---------------------------------------------
       //Set El Controlador de Contenido   < opcional
          request.setAttribute("v_pre_contentFile_path","../JSPF/DFContent.jsp" );

       }else{
          debug_mvc.InsertarMensaje("Acc", "DF - Index",0);
          request.setAttribute("accion_id", "index" );
          request.setAttribute("contenido_id", "index" );
       
       //Component Information 1---------------------------------------------
       //Component Information 2---------------------------------------------
       //   ....
       //Component Information n---------------------------------------------
       //Set El Controlador de Contenido   < opcional >
          request.setAttribute("v_pre_contentFile_path","../JSPF/DFContent.jsp" );
       }
    }
    //////////////////////////////////////////////////////////////////////////
      //////////////////////////////////////////////////////////////////////////

     private void doPortada(){
       debug_mvc.InsertarMensaje("Submodulo", "DF - doPortada",0);
    //Capturas el param PRINCIPAL "acc" que puede ser un Atributo o un Parametro de entrada
       String accion_id = this.getValid_Request_Param_String( "acc" );
       request.setAttribute("accion_id", accion_id );
       request.setAttribute("contenido_id", accion_id );
       debug_mvc.InsertarMensaje("accion", accion_id, 0);



       if( accion_id.equalsIgnoreCase("prueba_ejemplo") ){
          debug_mvc.InsertarMensaje("Acc", "DF - ejemplo",0);
       //Que dispositivo estamos presentando COMPUTER | MOBILE
       //Component Information 1---------------------------------------------
       //Component Information 2---------------------------------------------
       //   ....
       //Component Information n---------------------------------------------
       //Set El Controlador de Contenido   < opcional
          request.setAttribute("v_pre_contentFile_path","../JSPF/DFContent.jsp" );

       }else{
          debug_mvc.InsertarMensaje("Acc", "DF - Index",0);
       //Esto solo se hace en los else .... ojo!
          request.setAttribute("accion_id", "index" );
          request.setAttribute("contenido_id", "index" );
       //Que dispositivo estamos presentando COMPUTER | MOBILE
          if( this.esMobile_userAgent() ){ request.setAttribute("layoutActivo","WEB-INF/Layout/MobilePortada.jsp" );
          }else{  request.setAttribute("layoutActivo","WEB-INF/Layout/ComputerPortada.jsp" );     }
       //Component Information 1---------------------------------------------
       //Component Information 2---------------------------------------------
       //   ....
       //Component Information n---------------------------------------------
       //Set El Controlador de Contenido   < opcional
          request.setAttribute("v_pre_contentFile_path","../JSPF/DFContent.jsp" );
       }
    }
     //////////////////////////////////////////////////////////////////////////
      //////////////////////////////////////////////////////////////////////////

    private void doError(){
        debug_mvc.InsertarMensaje("Submodulo", "DF - doError",0);
    //Capturas el param PRINCIPAL "acc" que puede ser un Atributo o un Parametro de entrada
       String accion_id = this.getValid_Request_Param_String( "acc" );
       request.setAttribute("accion_id", accion_id );
       request.setAttribute("contenido_id", accion_id );
       debug_mvc.InsertarMensaje("accion", accion_id, 0);


       if( accion_id.equalsIgnoreCase("prueba_ejemplo") ){
          debug_mvc.InsertarMensaje("Acc", "DF - full_info",0);
       //Que dispositivo estamos presentando COMPUTER | MOBILE
       //Component Information 1---------------------------------------------
       //Component Information 2---------------------------------------------
       //   ....
       //Component Information n---------------------------------------------
       //Set El Controlador de Contenido   < opcional
          request.setAttribute("v_pre_contentFile_path","../JSPF/DFContent.jsp" );

       }else{
          debug_mvc.InsertarMensaje("Acc", "DF - Index",0);
          request.setAttribute("accion_id", "index" );
          request.setAttribute("contenido_id", "index" );
       //Que dispositivo estamos presentando COMPUTER | MOBILE
          if( this.esMobile_userAgent() ){ request.setAttribute("layoutActivo","WEB-INF/Layout/Mobile.jsp" );
          }else{  request.setAttribute("layoutActivo","WEB-INF/Layout/Computer.jsp" );     }
       //Component Information 1---------------------------------------------
       //Component Information 2---------------------------------------------
       //   ....
       //Component Information n---------------------------------------------
       //Set El Controlador de Contenido   < opcional >
          request.setAttribute("v_pre_contentFile_path","../JSPF/DFContent.jsp" );
      }
    }
      //////////////////////////////////////////////////////////////////////////
      //////////////////////////////////////////////////////////////////////////

       private void doStatic(){
         debug_mvc.InsertarMensaje("Submodulo", "DF - doStatic",0);
    //Capturas el param PRINCIPAL "acc" que puede ser un Atributo o un Parametro de entrada
       String accion_id = this.getValid_Request_Param_String( "acc" );
       request.setAttribute("accion_id", accion_id );
       request.setAttribute("contenido_id", accion_id );
       debug_mvc.InsertarMensaje("accion", accion_id, 0);


       if( accion_id.equalsIgnoreCase("particularizar") ){
          debug_mvc.InsertarMensaje("Acc", "DF - particularizar",0);
       //Que dispositivo estamos presentando COMPUTER | MOBILE
       //Component Information 1---------------------------------------------
       //Component Information 2---------------------------------------------
       //   ....
       //Component Information n---------------------------------------------
       //Set El Controlador de Contenido   < opcional
          request.setAttribute("v_pre_contentFile_path","../JSPF/DFContent.jsp" );

       }else{
          debug_mvc.InsertarMensaje("Acc", "DF - Por Defecto",0);
          request.setAttribute("accion_id", "index" );
          request.setAttribute("contenido_id", "index" );
       //Que dispositivo estamos presentando COMPUTER | MOBILE
          if( this.esMobile_userAgent() ){ request.setAttribute("layoutActivo","WEB-INF/Layout/Mobile.jsp" );
          }else{  request.setAttribute("layoutActivo","WEB-INF/Layout/Computer.jsp" );     }
       //Component Information 1---------------------------------------------
       //Component Information 2---------------------------------------------
       //   ....
       //Component Information n---------------------------------------------
       //Set El Controlador de Contenido   < opcional >
          request.setAttribute("v_pre_contentFile_path","../JSPF/DFContent.jsp" );
       }

    }
      //////////////////////////////////////////////////////////////////////////
      //////////////////////////////////////////////////////////////////////////



     protected void modulo_init(){
  //GENERAL
  request.setAttribute("v_ge_modulo", "Default");       //Nombre del Modulo que estamos trabajando
  request.setAttribute("v_ge_acronimo","DF" );            //ACRONIMO DEL MODULO

  //PRESENTACION
  //Aqui utilizar algo para setear el browser
  //request.setAttribute("v_pre_layout","WEB-INF/Layout/Browser.jsp" );

  //controlador deL content
  request.setAttribute("v_pre_contentFile_path","../JSPF/DFContent.jsp" );



  request.setAttribute("v_pre_titulo","DEFAULT SYSTEM" );

  // POSITION VAR  -- Posicion en la Aplicacion WEB
  request.setAttribute("v_pos_inicio","Inicio" );     //<inicio> Lugar de incio o INDEX
 request.setAttribute("v_pos_separador"," - " );      //< - > Tipo de Separador en la Secuencia
 request.setAttribute("v_pos_enlaces"," false" );      //<false> Si la Secuencia son enlaces o Palabras
 request.setAttribute("v_pos_posicion",request.getAttribute("v_pos_inicio") );


 //request.setAttribute("","" );

}



     public Boolean esNumero(String palabra){
       Boolean valor = false;
       if (!palabra.trim().matches(".*\\D+.*")){
         valor = true;
       }
       return valor;

     }

      protected String getValid_Request_Param_String( String param_name ){
      String param_final ="index";
      if( request.getParameter(param_name) != null ){
        if( request.getParameter(param_name).trim() != null ){
          param_final = request.getParameter(param_name).trim();
        }
      }
    return param_final;
   }
    protected int    getValid_Request_Param_Int( String param_name ){
      String param_final ="1";
      if( request.getParameter(param_name) != null ){
        if( request.getParameter(param_name).trim() != null ){
          param_final = request.getParameter(param_name).trim();
        }
      }
    return Integer.parseInt(param_final);
   }


     protected String getValid_Request_Atribute_String( String attr_name ){
      String param_final ="index";
      if( request.getAttribute(attr_name) != null ){
          param_final = (String)request.getAttribute(attr_name);
      }
    return param_final;
 }



protected  Boolean esMobile_userAgent(){
  return false;
}


}
